package com.majun.customstarter.config;

import com.majun.customstarter.service.WeatherService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 3) 步骤3,新建一个AutoConfiguration自动配置类,用来让SpringBoot依据它自动配置
//开启配置@Configuration的作用：标注在类上，配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的<beans>
//表明一个类中声明一个和多个 @Bean 标记的方法，并且这些方法被 Spring 容器管理用于生成 Bean 定义以及在运行时这些 Bean 的服务请求。
@Configuration
// 如果该类只使用了@ConfigurationProperties注解，然后该类没有在扫描路径下或者没有使用@Component等注解，导致无法被扫描为bean，
//  那么就必须在配置类上使用@EnableConfigurationProperties注解去指定这个类，这个时候就会让该类上的@ConfigurationProperties生效，然后作为bean添加进spring容器中
@EnableConfigurationProperties(WeatherSource.class)
// 这个配置意思是必须有key为weather.enable,value为true的情况下,配置才生效
@ConditionalOnProperty(prefix = "weather", name = "enable", havingValue = "true", matchIfMissing = false)
public class WeatherAutoConfiguration {

    /**
     * 注入属性类
     */
//    @Autowired
//    private WeatherSource weatherSource;

    /**
     * 当前上下文中没有 MyJsonService 类时创建类
     *
     * @return 返回创建的实例
     */
    @Bean
    @ConditionalOnMissingBean(WeatherService.class)
    public WeatherService weatherService(WeatherSource weatherSource) {
        return new WeatherService(weatherSource);
    }
}